---
id: 65824111a09164518320088d
title: Крок 21
challengeType: 20
dashedName: step-21
---

# --description--

Функція `filter()` дозволяє вибрати елементи з ітерованого об’єкта (наприклад, списку) на основі результату функції:

```py
filter(my_function, my_list)
```

`filter()` повертає ітератор, до якого входять елементи `my_list`, для яких `my_function` повертає `True`. Ітератор — це спеціальний об’єкт, який дозволяє виконати ітерацію над елементами колекції (наприклад, списку).

Викличте `filter()` в межах функції `filter_expenses_by_category`, передавши функцію `lambda`, яку ви написали в попередньому кроці, як перший аргумент та список `expenses` як другий аргумент.

# --hints--

Функція `filter_expenses_by_category` повинна містити `filter(lambda expense: expense['category'] == category, expenses)`.

```js
({ test: () =>
  {
    const transformedCode = code.replace(/\r/g, "");        
    const foo = __helpers.python.getDef("\n"+transformedCode, "filter_expenses_by_category");
    const {function_body} = foo;    
    assert(function_body.match(/^\s+filter\s*\(\s*lambda\s+expense\s*:\s*expense\s*\[\s*("|')category\1\s*\]\s*==\s*category\s*,\s*expenses\s*\)/m));
  }
})
```

# --seed--

## --seed-contents--

```py
def add_expense(expenses, amount, category):
    expenses.append({'amount': amount, 'category': category})

def print_expenses(expenses):
    for expense in expenses:
        print(f'Amount: {expense["amount"]}, Category: {expense["category"]}')

def total_expenses(expenses):
    return sum(map(lambda expense: expense['amount'], expenses))

--fcc-editable-region--
def filter_expenses_by_category(expenses, category):
    lambda expense: expense['category'] == category
--fcc-editable-region--

expenses = []
```
